package com.example.sulingorder.rabbitlistener;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.sulingorder.entity.OrderEntity;
import com.example.sulingorder.service.OrderService;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author: 1322127758@qq.com
 * @date: 2022/3/30 23:31
 * @作用:
 */
@Component
@RabbitListener(queues = {"paysuccess.suling.queue"})
public class PaysuccessQueueListener {
    @Autowired
    private OrderService orderService;

    /**
     * 处理用户发布订单支付成功, 支付成功但是修改订单失败才需要处理,将支付状态修改为已支付
     * @param message :消息发过来的完整信息,包含消息内容
     * @param key :按类型直接取消息内容, 这个值是订单号
     * @param channel :连接通道
     */
    @RabbitHandler
    public void upOrderParState(Message message, Object key, Channel channel){
        try{
            OrderEntity orderEntity = orderService.getOne(new QueryWrapper<OrderEntity>().eq("or_order_sn", key));
            if(null != orderEntity){
                if(orderEntity.getParSuccess() == null || 0 == orderEntity.getParSuccess()){
                    OrderEntity orderEntity1 = new OrderEntity();
                    orderEntity1.setParSuccess(1);
                    boolean b = orderService.updateById(orderEntity1);
                    if(!b){
                        throw new Exception();
                    }
                }

                System.out.println("处理成功");
                /*
                 * basicAck()确认签收函数
                 * 参数一:每个消息都有一个自增的id,参数就是说这个id的消息以接收到了
                 * 参数二:是否批量确认 一般设置false  因为当前id不能代表所以信息  可能处理下一个消息的时候关机了
                 */
                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
            }
        }catch (Exception e){
            //网络出问题
        }
    }
}
